package com.example.httpdemo.http;

import java.io.IOException;

import io.reactivex.rxjava3.core.Single;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.schedulers.Schedulers;
import io.reactivex.rxjava3.disposables.Disposable;
import retrofit2.HttpException;

public class NetworkHelper {
    /**
     * 发起网络请求
     *
     * @param single         RxJava 的 Single 对象
     * @param successHandler 成功回调
     * @param errorHandler   失败回调
     * @return Disposable 对象，用于取消订阅
     */
    public static <T> Disposable request(Single<T> single, OnSuccess<T> successHandler, OnError errorHandler) {
        return single.subscribeOn(Schedulers.io()) // 在 IO 线程执行网络请求
                .observeOn(AndroidSchedulers.mainThread()) // 在主线程处理结果
                .subscribe(
                        successHandler::onSuccess, // 成功回调
                        throwable -> errorHandler.onError(handleError(throwable)) // 失败回调
                );
    }

    /**
     * 统一处理错误
     */
    private static String handleError(Throwable throwable) {
        if (throwable instanceof IOException) {
            return "网络连接失败，请检查网络设置";
        } else if (throwable instanceof HttpException) {
            return "服务器错误，请稍后重试";
        } else {
            return "未知错误：" + throwable.getMessage();
        }
    }

    // 成功回调接口
    public interface OnSuccess<T> {
        void onSuccess(T result);
    }

    // 失败回调接口
    public interface OnError {
        void onError(String errorMessage);
    }
}